<!DOCTYPE html>
<html>
<head>
	<meta charset="utf-8">
    <meta name="viewport" content="width=device-width">
    <title>组合继承</title>
</head>
<body>
    <h1>组合继承</h1>
</body>
<script type="text/javascript">
    
    function Parent (name) {
        this.name = name;
        this.colors = ['red', 'blue', 'green'];
    }
    
    Parent.prototype.getName = function () {
        console.log(this.name)
    }
    
    function Child (name, age) {
    
        Parent.call(this, name);
    
        this.age = age;
    
    }
    
    Child.prototype = new Parent();
    Child.prototype.constructor = Child;
    

    var child1 = new Child('kevin', '18');
    child1.colors.push('black');
    console.log(child1.name); // kevin
    console.log(child1.age); // 18
    console.log(child1.colors); // ["red", "blue", "green", "black"]
    

    var child2 = new Child('daisy', '20');
    console.log(child2.name); // daisy
    console.log(child2.age); // 20
    console.log(child2.colors); // ["red", "blue", "green"]

    console.log('child1',child1)
    console.log('Child.prototype',Child.prototype)
    
    // 特点：
    // 可以继承实例属性/方法，也可以继承原型属性/方法
    // 既是子类的实例，也是父类的实例
    // 不存在引用属性共享问题
    // 可传参
    // 函数可复用

    // 缺点：
    // 调用了两次父类构造函数，生成了两份实例（子类实例将子类原型上的那份屏蔽了）

</script>
</html>